package admin.forms;

import helpers.StringHelper;

import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;

import admin.data.StaffData;

import models.StaffModel;

public class StaffForm {
	public TreeMap checkValid(HttpServletRequest request, StaffModel user) {
		TreeMap form = new TreeMap();
		TreeMap check = new TreeMap();
		
		String username = (String) request.getParameter("username").toLowerCase();
		String name = (String) request.getParameter("name");
		String password = (String) request.getParameter("password");
		String repassword = (String) request.getParameter("repassword");
		String status = (String) request.getParameter("status");
		String role = (String) request.getParameter("role");
		String action = (String) request.getAttribute("action");
		
		if (action != null && !action.equalsIgnoreCase("edit")) {
			if ((username == null || username.equals(""))) {
				check.put("username", "Bạn chưa nhập thông tin email.");
				user.setUsername(username);
			} else {
				StaffData staffData = new StaffData();
				if ((action == null || !action.equalsIgnoreCase("edit")) && staffData.checkStaffExists(username)) {
					check.put("username", "Email đã được đăng ký sử dụng trước đó. Vui lòng chọn hòm thư khác.");
				}else if (action == null || !action.equalsIgnoreCase("edit")) {
					Pattern p = Pattern.compile("^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$");
				    Matcher m = p.matcher(username);
				    if (!m.matches()) {
				    	check.put("username", "Email không hợp lệ.");
				    }
				} 
				
				user.setUsername(username);
			}
			
			if (password == null || password.isEmpty()) {
				check.put("password", "Mật khẩu không được để trống.");
				user.setPassword("");
			} else {
				if (repassword == null || repassword.isEmpty()) {
					check.put("repassword", "Xác nhận mật khẩu không được bỏ trống.");
					user.setRepassword("");
				} else if (!password.equalsIgnoreCase(repassword)) {
					check.put("repassword", "Mật khẩu và xác nhận mật khẩu không giống nhau. Xin vui lòng nhập lại.");
					user.setRepassword(repassword);
				}
				user.setPassword(password);
			}
		}
		
		if (name == null || name.equals("")) {
			check.put("name", "Bạn chưa nhập tên.");
			user.setName(name);
		} else {
			user.setName(name);
		}
		
		if (status != null) {
			try {
				user.setStatus(Integer.parseInt(status));
			} catch (Exception e) {
				check.put("status", "Trạng thái không hợp lệ!");
			}
		}
		
		if (role != null) {
			try {
				user.setRole(Long.parseLong(role));
			} catch (Exception e) {
				check.put("role", "Quyền truy cập không hợp lệ!");
			}
		}
		
		form.put("checkValid", check);
		form.put("user", user);
		
		return form;
	}
	
	public TreeMap checkLogin(HttpServletRequest request, StaffModel user) {
		TreeMap form = new TreeMap();
		TreeMap check = new TreeMap();
		
		String username = (String) request.getParameter("username").toLowerCase();
		String password = (String) request.getParameter("password");
		
		if (username == null || username.isEmpty()) {
			check.put("username", "Bạn chưa nhập thông tin username.");
			user.setUsername("");
		} else {
		    user.setUsername(username);
		}
		
		if (password == null || password.isEmpty()) {
			check.put("password", "Bạn chưa nhập thông tin mật khẩu.");
			user.setPassword("");
		} else {
			user.setPassword(password);
		}
		
		form.put("checkValid", check);
		form.put("user", user);
		
		return form;
	}
	
	public TreeMap checkValidProfile(HttpServletRequest request, StaffModel user) {
		TreeMap form = new TreeMap();
		TreeMap check = new TreeMap();
		
		String name = (String) request.getParameter("name");
		
		if (name == null || name.isEmpty()) {
			check.put("name", "Bạn chưa nhập thông tin tên.");
			user.setName("");
		} else {
		    user.setName(name);
		}
		
		form.put("checkValid", check);
		form.put("user", user);
		
		return form;
	}
	
	public TreeMap checkValidPassword(HttpServletRequest request, StaffModel user) {
		TreeMap form = new TreeMap();
		TreeMap check = new TreeMap();
		
		String oldPassword = (String) request.getParameter("oldpassword");
		String password = (String) request.getParameter("password");
		String repassword = (String) request.getParameter("repassword");
		if (!StringHelper.md5(oldPassword).equalsIgnoreCase(user.getPassword())) {
			check.put("oldpassword", "Mật khẩu cũ không đúng.");
		} else if (password == null || password.isEmpty()) {
			check.put("password", "Bạn chưa nhập mật khẩu.");
			password = "";
		} else {
			if (repassword == null || repassword.isEmpty()) {
				check.put("repassword", "Bạn chưa nhập xác nhận mật khẩu.");
				repassword = "";
			} else if (!password.equalsIgnoreCase(repassword)) {
				check.put("repassword", "Mật khẩu và xác nhận mật khẩu không giống nhau. Xin vui lòng nhập lại.");
			}
		}
		
		user.setPassword(password);
		user.setOldpassword(oldPassword);
		user.setRepassword(repassword);
		
		form.put("checkValid", check);
		form.put("user", user);
		
		return form;
	}
}
